// #include <iostream>
// using namespace std;

// const int N = 20;
// char arr[N][N];
// int w, h;
// int res;
// int dx[] = {1, 0, -1, 0}; // 行变化：下、左、上、右
// int dy[] = {0, -1, 0, 1}; // 列变化：对应左、下、右、上？
// bool st[N][N];

// void dfs(int x, int y)
// {
//     for (int i = 0; i < 4; i++)
//     {
//         int a = x + dx[i];
//         int b = y + dy[i];
//         // 检查边界条件：行h，列w
//         if (a < 0 || a >= h || b < 0 || b >= w)
//             continue;
//         if (st[a][b])
//             continue;
//         if (arr[a][b] == '#')
//             continue;
//         res++;
//         st[a][b] = true;
//         dfs(a, b);
//     }
// }

// int main()
// {
//     ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//     cin >> w >> h;
//     // 正确读取h行，每行w列
//     for (int i = 0; i < h; i++)
//     {
//         for (int j = 0; j < w; j++)
//         {
//             cin >> arr[i][j];
//         }
//     }
//     // 寻找@的位置
//     for (int i = 0; i < h; i++)
//     {
//         for (int j = 0; j < w; j++)
//         {
//             if (arr[i][j] == '@')
//             {
//                 st[i][j] = true;
//                 res = 1; // 初始位置计数
//                 dfs(i, j);
//                 cout << res << endl;
//                 return 0; // 直接结束，因为只有一个@
//             }
//         }
//     }
//     return 0;
// }

#include <iostream>

using namespace std;
int m, n; // m行n列
const int N = 30;
char arr[N][N];
int dx[] = {1, 0, -1, 0};
int dy[] = {0, -1, 0, 1};
bool st[N][N];
int res;
void dfs(int x, int y)
{
    for (int i = 0; i < 4; i++)
    {
        int a = x + dx[i];
        int b = y + dy[i];
        if (st[a][b])
            continue;
        if (arr[a][b] == '#')
            continue;
        if (a >= m || a < 0 || b >= n || b < 0)
            continue;
        st[a][b] = true;
        res++;
        dfs(a, b);
    }
}
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> m;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> arr[i][j];
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr[i][j] == '@')
            {
                st[i][j] = true;
                res = 1;
                dfs(i, j);
                break;
            }
        }
    }
    cout << res << endl;
    return 0;
}